Skip to content

feat(ui): make configuration pickers compact and inline - #2182

Merged
kevinjosethomas merged 20 commits into
mainfrom
feat/ui-inline-pickers
Sep 12, 2026
Merged

feat(ui): make configuration pickers compact and inline#2182
kevinjosethomas merged 20 commits into
mainfrom
feat/ui-inline-pickers

Conversation

@kevinjosethomas

@kevinjosethomas kevinjosethomas commented Sep 10, 2026

Copy link
Copy Markdown
Member
  • move model, provider, and mcp pickers into the prompt area with compact searchable rows
  • show selected-model input, cached-input, and output rates per million tokens
  • split the configuration menu into separate single-purpose pickers with no tab bar; each command opens only its own picker
  • right-align the provider in each model row, move the sign-in hint to its left as "require sign in", and order signed-in providers first with Prime Inference pinned on top when signed in
  • add per-model effort squares to the models picker: left and right adjust the highlighted model's effort level, squares fill up to the selection, and enter applies model and effort together
  • keep signed-in providers first in picker search results, above better-scoring unsigned matches
  • soften the selected-row highlight: bold text in the normal color on a subtle blended band instead of the opaque block with accent-colored text
  • align the effort squares across rows, space them as distinct squares, add adjust arrows on the highlighted row, and show the level name on the row
  • fold the pricing unit onto the provider/model detail line and end the block with clear whitespace
  • round token prices to three decimals, rendering tiny nonzero prices as <0.001
  • render effort marks as literal square glyphs (■/□), centered near the row midpoint, colored by selection: dark-gray empties everywhere, light-gray fills on non-highlighted rows, saturated purple fills only on the highlighted row
  • drop the "Models", "Providers", and "MCP" picker titles and explanatory subtitles so the search row leads each picker
  • move the pricing unit onto the price row as "dollars per 1 million tokens" trailing the output price
  • keep the effort cluster width fixed across level changes by reserving the longest supported level-name width
  • fill effort squares with a pastel purple (#a78bfa dark / #8b5cf6 light) only on the highlighted row, and use the compact "$ / 1M tokens" unit on the price row
  • keep the effort marks as ■/□, the largest square glyphs available in common terminal fallback fonts
  • drop the model detail header line so the block is just the price rows and their whitespace
  • validated npm run check and 215 focused tests

Fixes ENG-6111.
Design: Prime Agent UI/UX Improvements.


Note

Medium Risk
Large UX change to model/provider configuration and selection lifecycle in interactive mode; behavior is heavily tested but affects a core user path.

Overview
Replaces the tabbed full-pane configuration overlay with compact inline pickers mounted in the prompt area; closing or canceling restores the editor draft instead of hiding an overlay.

Models, providers, and MCP each open as a single-purpose picker (no tab bar or app.configuration.previousTab). Lists use a new inline menu layout: bordered search-first rows, soft selection (bold label on a blended band), and right-aligned trailing status (provider, require sign in, current).

The models picker adds effort/reasoning controls on each row (■/□ cluster, ←/→ on the highlighted row when search is empty; arrows edit search when it is not), Enter applies model plus explicitly adjusted effort while keeping focus until both complete, per-million-token pricing for the selection, signed-in-first ordering with Prime Inference pinned when authenticated, and updated search ranking.

Docs and keybindings reflect picker-specific behavior; onboarding dismisses the splash before opening model selection inline.

Reviewed by Cursor Bugbot for commit 5e841c0. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Render configuration pickers inline in the editor area with compact layout

  • Replaces the full-pane overlay configuration menu with inline pickers mounted in the editor container. Provider, model, and MCP pickers now render separately without tab chrome.
  • Removes tab-based navigation (app.configuration.previousTab, switchTab) from the configuration menu; Tab/Shift+Tab now stay within the active picker.
  • Adds inline rendering branches to MenuPanel, MenuRow, MenuList, MenuSearchInput, OAuthSelectorComponent, and ModelSelectorComponent with compact one-row items, right-aligned trailing metadata, and reduced padding.
  • Adds inline effort controls (filled/empty squares with left/right cycling) and responsive pricing details to ModelSelectorComponent; selection callback now carries an optional thinking level only when explicitly edited.
  • Model selection and effort application are now guarded by a busy state; the menu stays open until both operations succeed, and focus/draft text is preserved across authentication and failures.
  • Risk: ConfigurationMenuTabBar, app.configuration.previousTab keybinding, and ConfigurationMenuComponent.switchTab are removed; any out-of-tree consumers of these symbols will break. applyThinkingLevel now returns Promise<boolean> instead of void.

Macroscope summarized 5e841c0.

@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Prime Agent performance — completed

PR 5e841c0e compared with main 5255a6b8.

Overall: 0 regressed · 0 improved · 17 no clear change.

Metric Main This PR Change
Cold startup 2,937.4 ms 2,768.0 ms ≈ -169.3 ms (-5.77%)
Warm startup 1,675.0 ms 1,648.2 ms ≈ -26.8 ms (-1.60%)
Installation 27.42 s 25.49 s ≈ -1.93 s (-7.06%)
Compressed release artifacts 11.13 MB 11.13 MB ≈ -0.002 MB (-0.02%)
Installed footprint 597.55 MB 597.53 MB ≈ -0.02 MB (-0.00%)
Idle memory, summed RSS 1,037.78 MB 1,011.12 MB ≈ -26.65 MB (-2.57%)

Python runtime

Metric Main This PR Change
Python kernel startup 120.3 ms 123.9 ms ≈ +3.6 ms (+2.97%)
Python cell round trip 0.515 ms 0.477 ms ≈ -0.039 ms (-7.48%)
Empty bash command 11.2 ms 10.8 ms ≈ -0.4 ms (-3.51%)
Bash git status 16.1 ms 15.6 ms ≈ -0.5 ms (-2.80%)
Bash 32 KiB output 11.1 ms 11.1 ms ≈ -0.017 ms (-0.16%)
35 cells / 9 shell calls 161.7 ms 157.6 ms ≈ -4.1 ms (-2.53%)
Python interrupt to done 1.506 ms 1.514 ms ≈ +0.008 ms (+0.52%)
Python state snapshot 24.7 ms 25.1 ms ≈ +0.4 ms (+1.57%)
Python state restore 357.6 ms 345.1 ms ≈ -12.6 ms (-3.51%)
Python idle RSS 35.31 MB 33.93 MB ≈ -1.38 MB (-3.92%)
Python RSS after pandas workload 97.41 MB 95.98 MB ≈ -1.43 MB (-1.47%)

Sandbox cost: ~$0.0882 — no inference calls.
Run, logs, and downloadable raw results

Methodology and samples

Main resolved at 2026-09-11T22:26:21.944555+00:00. Harness 5255a6b8.
Linux x64, 4 vCPU, 8 GB RAM, 20 GB disk; region us.
Image: node:24-bookworm@sha256:be23f54a88d34e8824c741b19b91064094f92c1c97b194144bfc8b50d67258e2.
Stock tools, skills, daemon, and Python bootstrap enabled; fresh homes and a fixed Git fixture.
Onboarding is dismissed; the editor starts without a selected model or submitted prompt.
Medians shown. Arrows require a 20% timing/memory change plus absolute floors and IQR.
These practical noise floors are not a statistical significance test.
Cold means stopped Prime processes; OS filesystem caches are not flushed.
No model requests or credentials. Installation excludes build/setup time.
Installer tarballs use loopback; npm/Python downloads use the network with fresh caches.
Artifact size counts release tarballs; footprint after first use includes registry packages.
MB is decimal. Summed RSS can double-count shared pages; PSS is recorded when available.
Provisioning, setup, and build durations are recorded separately in the raw results.
Kernel probes use the installed JSONL runtime, outside the TUI/TypeScript host.
Per trial: 50 Python cells, 5 calls per shell case, and one 35-cell mix (9 git status calls).
Cell/shell values are batch means; other runtime timings are single operations.
State fixture: a 10,000-row × 8-column integer DataFrame and a 10,000-integer list.
Restore runs in a fresh kernel, including pandas imports; kernel startup is excluded.
Kernel RSS covers the isolated Python process; loaded RSS follows the pandas workload.
Costs estimate full sandbox lifetimes at configured rates, including setup and build.
Budget target: $1; not a billing cap. Checks are informational.

Metric Main successful/attempted PR successful/attempted Main spread PR spread
Cold startup 10/10 10/10 IQR 152.7 ms IQR 91.2 ms
Warm startup 10/10 10/10 IQR 50.8 ms IQR 37.9 ms
Installation 3/3 3/3 range 1.21 s range 1.11 s
Compressed release artifacts 1/1 1/1
Installed footprint 1/1 1/1
Idle memory, summed RSS 10/10 10/10 IQR 75.31 MB IQR 43.38 MB
Python kernel startup 10/10 10/10 IQR 6.7 ms IQR 3.8 ms
Python cell round trip 10/10 10/10 IQR 0.051 ms IQR 0.044 ms
Empty bash command 10/10 10/10 IQR 1.0 ms IQR 0.4 ms
Bash git status 10/10 10/10 IQR 1.1 ms IQR 1.2 ms
Bash 32 KiB output 10/10 10/10 IQR 0.5 ms IQR 0.7 ms
35 cells / 9 shell calls 10/10 10/10 IQR 14.3 ms IQR 7.1 ms
Python interrupt to done 10/10 10/10 IQR 0.057 ms IQR 0.077 ms
Python state snapshot 10/10 10/10 IQR 1.0 ms IQR 1.6 ms
Python state restore 10/10 10/10 IQR 41.1 ms IQR 29.4 ms
Python idle RSS 10/10 10/10 IQR 0.89 MB IQR 3.61 MB
Python RSS after pandas workload 10/10 10/10 IQR 1.67 MB IQR 4.38 MB

Comment thread packages/coding-agent/src/modes/interactive/interactive-mode.ts Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread packages/coding-agent/src/modes/interactive/components/menu-panel.ts Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 3 potential issues.

There are 4 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4c6c64e. Configure here.

Comment thread packages/coding-agent/src/modes/interactive/interactive-mode.ts Outdated
Comment thread packages/coding-agent/src/modes/interactive/interactive-mode.ts Outdated
Comment thread packages/coding-agent/src/modes/interactive/components/model-selector.ts Outdated
kevinjosethomas added a commit that referenced this pull request Sep 11, 2026
Incorporates #2180 at 9f36c23, #2182 at 5e841c0, #2183 at bf95115 and #2193 at cad6f03. Preserves the combined preview zero-count agents sections and purple refinement defaults.
@kevinjosethomas
kevinjosethomas merged commit a38ad5d into main Sep 12, 2026
25 checks passed
@kevinjosethomas
kevinjosethomas deleted the feat/ui-inline-pickers branch September 12, 2026 00:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant